package com.fbinggun.fbinggunutil.command;


import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.fbinggun.fbinggunutil.FPlugin;
import java.util.ArrayList;
import java.util.List;

/**
 * 子命令继承 （运行命令主父类）
 */
public abstract class ACommand {
    MainCommand mainCommand;
    public ACommand(MainCommand mainCommand) {
        this.mainCommand=mainCommand;
        mainCommand.argsCommand.put(getId().toLowerCase(),this);
    }

    public MainCommand getMainCommand() {
        return mainCommand;
    }

    /**
     * 获得插件
     * @return
     */
    public FPlugin getPlugin() {
        return mainCommand.getPlugin();
    }

    /**
     * 指令介绍
     * @return
     */
    public abstract String getPresentation();

    /**
     * 是否op运行 true时 只能op运行
     * @return
     */
    public abstract boolean isOp();


    /**
     * 运行权限
     * @return
     */
    public abstract String getPermission();

    /**
     * 指令ID
     * @return
     */
    public abstract String getId() ;

    /**
     * 运行指令
     * @param sender 发送人
     * @param args 指令参数
     * @return
     */
    public abstract boolean run(CommandSender sender, String[] args);

    /**
     * 是否由玩家运行 true时 只能由玩家运行
     * @return
     */
    public abstract boolean isPlayer();

    /**
     * 运行指令
     * @param sender
     * @param args
     * @return
     */
    public boolean runCommand(CommandSender sender, String[] args){
        if(isPlayer()&&!(sender instanceof Player)){
            sender.sendMessage("§c玩家指令 后台无法执行");
               return false;
        }
        if(isOp()&&!sender.isOp()){
            sender.sendMessage(getPlugin().getLang("On_Per"));
                return false;
        }
        if(getPermission()!=null&&!sender.hasPermission(getPermission())){
            sender.sendMessage(getPlugin().getLang("On_Per"));
            return false;
        }
       return run(sender,args);
    }

    public void sendMessage(CommandSender sender, String msg){
        sender.sendMessage(getPlugin().getLang(msg));
    }
    /**
     * 添加tab快捷补全
     * @param l 参数位置
     * @param sender 发送人
     * @return
     */
    public List<String> getTAB(int l,CommandSender sender,String[] args){
        List<String> list = new ArrayList<>();
        if(l==1){
            list.add(getId());
        }
        return list;
    }

    /**
     * 添加tab快捷补全
     * @param l 参数位置
     * @param sender 发送人
     * @return
     */
    public List<String> getTAB(int l,CommandSender sender){
        return getTAB(l,sender,null);
    }

}
